package com.dyz.wsw.domain.market.repository.persist;

import com.dyz.wsw.domain.market.pojo.MarketCard;
import org.springframework.data.r2dbc.repository.Query;
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;

/**
 * @author dyz
 * Time 2024/6/9 19:16
 */
@Repository
public interface MarketCardRepository extends R2dbcRepository<MarketCard,Long> {


    /**
     * 根据目录id查询分页数据
     * 这里就不做总数统计了
     * @param cId 目录id
     * @param limit1 跳过的行数
     * @param limit2 请求的行数
     * @return 查询的分页结果
     */
    @Query("SELECT * FROM market_card WHERE c_id=:cId ORDER BY id LIMIT :limit1,:limit2")
    Flux<MarketCard> getCardsByCId(Long cId, Integer limit1, Integer limit2);


    /**
     * 随机查询若干条数据
     * 目前优化了一下sql
     * TODO 1.考虑到逻辑删除，后期还需对-limitCount调整一些细节
     * TODO 2.目前随机查询只能基于表中id连续的情况，取一块数据，如果表id不连续，虽然不影响使用，但随机性会出现一些问题（即使出现了问题用户也无法感知）
     * @param randNum 计算得到过滤数
     * @param limitCount 限制数量
     * @return 查询到的数据
     */
    @Query("SELECT * FROM market_card WHERE id > (SELECT :randNum%(COUNT(id))-:limitCount+1 FROM market_card) LIMIT :limitCount;")
    Flux<MarketCard> getRandomCards(Integer randNum, Integer limitCount);

}
